from functools import wraps

##装饰器函数，接受一个类 cls 作为参数
def singleton(cls):
    ##这是一个字典，用于存储类的唯一实例。
    instance = {}

    ##这是一个装饰器，用于将原始类 cls 的信息（如名称、文档字符串等）复制到包装函数 wrapper 上。这是为了保持原始类的元数据。
    @wraps(cls)
    def wrapper(*args, **kwargs):
        if cls not in instance:
            instance[cls] = cls(*args, **kwargs)
        return instance[cls]
    return wrapper

@singleton
class President:
    print("tttttt")


def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()
